using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using webapi.Models;
using webapi.Models.Database;

namespace webapi.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LikeController : ControllerBase
    {
        // 构造方法注入
        private readonly CnewsContext _context;
        public LikeController(CnewsContext context)
        {
            _context = context;
        }


        // 点赞
        /// <summary>
        /// 点赞
        /// </summary>
        [HttpPost]
        public string Like(int articleId, int userId)
        {
            // 判断参数是否合法
            if (!ModelState.IsValid)
            {
                return "参数错误";
            }

            // 业务逻辑
            // 判断数据库中是否存在该作者
            if (_context.Users.Where(u => u.UserId == userId).Count() == 0)
            {
                return "用户不存在";
            }

            // 判断数据库中是否存在该文章
            if (_context.Articles.Where(a => a.ArticleId == articleId).Count() == 0)
            {
                return "文章不存在";
            }

            // 判断数据库中是否存在该点赞记录
            if (_context.Likes.Where(l => l.ArticleId == articleId && l.UserId == userId).Count() == 0)
            {
                // 实例化Like类，然后将传递的参数赋值给Like类
                var model = new Like();
                model.ArticleId = articleId;
                model.UserId = userId;
                _context.Likes.Add(model);
                if (_context.SaveChanges() > 0)
                {
                    return "点赞成功";
                }
                return "点赞失败";
            }
            return "已经点赞过了";
        }

        // 取消点赞
        /// <summary>
        /// 取消点赞
        /// </summary>
        [HttpPost]
        public string CancelLike(int articleId, int userId)
        {
            // 判断参数是否合法
            if (!ModelState.IsValid)
            {
                return "参数错误";
            }

            // 业务逻辑
            // 判断数据库中是否存在该作者
            if (_context.Users.Where(u => u.UserId == userId).Count() == 0)
            {
                return "用户不存在";
            }

            // 判断数据库中是否存在该文章
            if (_context.Articles.Where(a => a.ArticleId == articleId).Count() == 0)
            {
                return "文章不存在";
            }

            // 判断数据库中是否存在该点赞记录
            if (_context.Likes.Where(l => l.ArticleId == articleId && l.UserId == userId).Count() == 0)
            {
                return "没有点赞过";
            }

            // 实例化Like类，然后将传递的参数赋值给Like类
            var model = new Like();
            model.ArticleId = articleId;
            model.UserId = userId;
            _context.Likes.Remove(model);
            if (_context.SaveChanges() > 0)
            {
                return "取消点赞成功";
            }
            return "取消点赞失败";
        }

        // 获取指定文章的点赞数
        /// <summary>
        /// 获取指定文章的点赞数
        /// </summary>
        [HttpGet]
        public string GetLikeSum(int articleId)
        {
            // 判断参数是否合法
            if (!ModelState.IsValid)
            {
                return "参数错误";
            }

            // 业务逻辑
            // 判断数据库中是否存在该文章
            if (_context.Articles.Where(a => a.ArticleId == articleId).Count() == 0)
            {
                return "文章不存在";
            }

            // 获取点赞数
            var LikeSum = _context.Likes.Where(l => l.ArticleId == articleId).Count().ToString();
            return LikeSum;
        }

        // 获取所有文章的点赞信息
        /// <summary>
        /// 获取所有文章的点赞信息
        /// </summary>
        [HttpGet]
        public List<GetLikeRespone> GetAllLike()
        {
            // 业务逻辑
            var respone = new List<GetLikeRespone>();
            respone = _context.Articles.Select(a => new GetLikeRespone
            {
                ArticleId = a.ArticleId,
                ArticleTitle = a.ArticleTitle,
                LikeSum = _context.Likes.Where(l => l.ArticleId == a.ArticleId).Count()
            }).ToList();
            return respone;
        }

        // 判断指定用户是否点赞指定文章
        /// <summary>
        /// 判断指定用户是否点赞指定文章
        /// </summary>
        [HttpGet]
        public string IsLike(int articleId, int userId)
        {
            // 判断参数是否合法
            if (!ModelState.IsValid)
            {
                return "参数错误";
            }

            // 业务逻辑
            // 判断数据库中是否存在该作者
            if (_context.Users.Where(u => u.UserId == userId).Count() == 0)
            {
                return "用户不存在";
            }

            // 判断数据库中是否存在该文章
            if (_context.Articles.Where(a => a.ArticleId == articleId).Count() == 0)
            {
                return "文章不存在";
            }

            // 判断数据库中是否存在该点赞记录
            if (_context.Likes.Where(l => l.ArticleId == articleId && l.UserId == userId).Count() == 0)
            {
                return "没有点赞过";
            }
            return "已经点赞过了";
        }
    }

}